package com.test33_反射;

import org.junit.Test;

/**
 * Class，反射操作类
 */
public class Demo01_Class {

    @Test
    public void test1() {
        Book book = new Book();
        book.read();
        // 获取类的相关信息
        System.out.println(book.getClass().getName());          // 对象所属类的完整名称
        System.out.println(book.getClass().getSimpleName());    // 对象所属类的简化名称
        System.out.println(book.getClass().getTypeName());      // 获取对象所属类的类型
    }

    /**
     * 获取Class类的实例化对象
     * 方式一：类对象.getClass()
     */
    @Test
    public void test2() {
        printClass(new Book().getClass());
        printClass(new java.util.Date().getClass());
    }

    /**
     * 获取Class类的实例化对象
     * 方式二：类名称.class
     */
    @Test
    public void test3() {
        Class<?> clazzA = IBook.class;
        Class<?> clazzB = java.util.Date.class;
        System.out.println(clazzA);
        System.out.println(clazzB);
    }

    /**
     * 获取Class类的实例化对象
     * 方式三：Class.forName
     */
    @Test
    public void test4() throws Exception {
        Class<?> clazz = Class.forName("java.util.Date");
        System.out.println(clazz);
    }

    public static void printClass(Class<?> clazz) {
        System.out.println("【当前操作的类型】" + clazz.getName());
    }
}

class Book {
    public void read() {
        System.out.println("认真学习李兴华老师出版的《Java从入门到项目实战》");
    }
}

interface IBook {
}
